/** @file         ring_buffer_memory_pool.h
 *  @brief        环形缓冲内存池对外接口，以及数据定义
 *  @author       Schips
 *  @date         2020-10-26 23:55:52
 *  @version      v1.0
 *  @copyright    Copyright By Schips, All Rights Reserved
 *
 **********************************************************
 *
 *  @attention    NOTE
 *
 *
 *  @par 修改日志:
 *  <table>
 *  <tr><th>Date       <th>Version   <th>Author    <th>Description
 *  <tr><td>2020-10-26 <td>1.0       <td>Schips    <td>创建初始版本
 *  <tr><td>2020-11-14 <td>1.1       <td>Schips    <td>允许注册多个名字的池，以支持不同的业务。
 *  </table>
 *
 **********************************************************
 */

#ifndef __RING_BUFFER_MEMORY_POOL__
#define __RING_BUFFER_MEMORY_POOL__

// 初始化块，用于后续 添加
unsigned int rbmp_init(void);

// 根据名字找到 存在的 池
int rbmp_get_pool_id(const char * name);

// 申请内存 (默认 使用第一块 内存块, 不允许多个业务使用同一块)
char* rbmp_malloc(unsigned int size);
// 申请内存(根据名字来寻找)
char* rbmp_malloc_by_name(const char * name, unsigned int size);
// 申请内存(根据ID来寻找)
char* rbmp_malloc_by_id(int id, unsigned int size);

// 释放最早申请的内存 (默认使用第一块内存块)
void rbmp_free_first(void);
// 释放最早申请的内存(根据名字寻找)
void rbmp_free_first_by_name(const char* name);
// 释放最早申请的内存(根据ID寻找)
void rbmp_free_first_by_id(int id);

// 获取最早申请的内存(默认使用第一块内存块)
char* rbmp_get_first(unsigned int *size);
// 获取最早申请的内存(根据名字寻找)
char* rbmp_get_first_by_name(const char* name, unsigned int *size);
// 获取最早申请的内存(根据ID寻找)
char* rbmp_get_first_by_id(int id, unsigned int *size);

// 注册一个池
int rbmp_add_pool(char *name, char* pool_addr, unsigned int pool_size);
// 删除一个注册的池(数组前移)
int rbmp_remove_pool(const char *name);
// 删除所有注册的块
void rbmp_remove_all_pools(void);

// 打印所有的信息
void rbmp_dump(void);

#endif /* Head define end*/

